package 剑指offer;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Scanner;

/**
 * 题目描述
 * 请实现一个函数用来找出字符流中第一个只出现一次的字符。
 * 例如，当从字符流中只读出前两个字符"go"时，第一个只出现一次的字符是"g"。
 * 当从该字符流中读出前六个字符“google"时，第一个只出现一次的字符是"l"。
 * 输出描述: 如果当前字符流没有存在出现一次的字符，返回#字符。
 *
 * @author Administrator
 */
public class 字符流中第一个只出现一次的字符2 {
    private static StringBuilder sb = null;
    private static LinkedHashMap<Character, Boolean> hashMap = null;
    static StringBuilder stp = new StringBuilder();

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();

        for (int i = 0; i < str.length(); i++) {
            sb = new StringBuilder(str.substring(0, i + 1));
            Insert(FirstAppearingOnce());
        }

        System.out.println(stp.toString());
    }

    public static void Insert(char ch) {
        stp.append(ch);
    }

    //return the first appearence once char in current stringstream
    public static char FirstAppearingOnce() {
        if (sb == null || sb.length() == 0) {
            return '#';
        } else if (sb.length() == 1) {
            return sb.charAt(0);
        }
        hashMap = new LinkedHashMap<>();
        for (int i = 0; i < sb.length(); i++) {
            if (!hashMap.containsKey(sb.charAt(i))) {
                hashMap.put(sb.charAt(i), true);
            } else {
                hashMap.put(sb.charAt(i), false);
            }
        }
        for (HashMap.Entry<Character, Boolean> entry : hashMap.entrySet()) {
            if (entry.getValue()) {
                return entry.getKey();
            }
        }

        return '#';

    }
}
